home *** CD-ROM | disk | FTP | other *** search
- {
- MIKE BRENNAN
-
- > I've been trying For some time to get a Pascal Procedure that can
- > SCALE and/or ROTATE Graphic images. if anyone has any idea how to do
-
- Here are a couple of Procedures I made For rotating images, 2D and 3D. I
- basically had to rotate each dot individually, and then form the image by
- connecting the specified dots. Here they are...
- }
-
- Procedure Rotate(cent1, cent2 : Integer; { Two centroids For rotation }
- angle : Real; { Angle to rotate in degrees }
- Var coord1, coord2 : Real); { both coordinates to rotate }
- Var
- coord1t, coord2t : Real;
- begin
- {Set coordinates For temp system}
- coord1t := coord1 - cent1;
- coord2t := coord2 - cent2;
-
- {set new rotated coordinates}
- coord1 := coord1t * cos(angle * pi / 180) - coord2t * sin(angle * pi / 180);
- coord2 := coord1t * sin(angle * pi / 180) + coord2t * cos(angle * pi / 180);
-
- {Change coordinates from temp system}
- coord1 := coord1 + cent1;
- coord2 := coord2 + cent2;
- end;
-
- Procedure Draw3d(x, y, z : Real; {coordinates} a, b : Real; {View angles}
- Var newx, newy : Integer); {return coordinates}
- Var
- Xd, Yd, Zd : Real;
- begin
- Xd := cos(a * pi / 180) * cos(b * pi / 180);
- Yd := cos(b * pi / 180) * sin(a * pi / 180);
- Zd := -sin(b * pi / 180);
- {Set coordinates For X/Y system}
- newx:= round(-z * Xd / Zd + x);
- newy:= round(-z * Yd / Zd + y);
- end;
-
- {
- For the first Procedure, you can rotate an image along any two axes, (ie
- X,Y...X,Z...Y,Z). Simply calculate the centroid For each axe, (the average X
- coordinate, or Y or Z), then pass the angle to rotate (use a negative For other
- direction) and it will pass back the new rotated coordinates.
-
- The second Procedure is For 3D drawing only. It transforms any 3D dot into
- its corresponding position on a 2D plan (ie your screen). The new coordinates
- are returned in the NewX, and NewY. Those are what you would use to plot your
- dot on the screen.
- }